# 隐藏属性名，通过get set方法设置属性的读写，增加了安全性和处理逻辑
# 没有封装：
# class Person:
#     def __init__(self,age,name):
#         self.age=age
#         self.name=name
#
#     def say(self):
#         print("my name is %s,i am %s" %(self.name,self.age))
#
# #正确写法
# p=Person(16,"张三")
# p.say()
# #随便乱写，名字和年龄都没有校验
# p=Person(-1,"!@#")
# p.say()
# #随便读取和设置年龄和名字
# p.age=000
# p.name="haha"

#通过方法来设置属性，方法可以增加处理判断逻辑
class Person:
    def __init__(self,age,name):
        self.hidden_age=age
        self.hidden_name=name

    def get_age(self):
        print("有人尝试读取年龄")
        return self.hidden_age

    def set_age(self,age):
        print("有人尝试修改年龄")
        if age>0:
            self.hidden_age=age
        else:
            print("年龄有误，请重新输入")

    def say(self):
        print("my name is %s,i am %s"%(self.hidden_name,self.hidden_age))


# #正确写法
# p=Person(16,"张三")
# p.say()
# #随便乱写，名字和年龄都没有校验
# p=Person(-1,"!@#")
# p.say()

#直接报错__init__() missing 2 required positional arguments: 'age' and 'name'
#外部调用者不知道类的name和age已经被改了
#p=Person()
# p.name="haha"
# p.age='16'
# p.say()

#想修改年龄,只能用这种方式，不能用p.age=XXX这种方式修改了，并且对年龄有限制
p=Person(16,"张三")
#print(p.get_age())
p.set_age(-1)

